package com.haojin.java2;
/*
 * 类的内部成员之五，内部类
 * 1.Java中允许将一个类A声明在另一个类B中，则类A就是累不累，类B称为外部类
 * 
 * 2.内部类的分类     成员内部类 VS 局部内部类（方法内，代码块内，构造器内）
 * 
 * 3.成员内部类：
 *     一方面，作为外部类的成员
 *     >调用外部类的结构
 *     >可以用static修饰
 *     >可以被四种不同的权限修饰符修饰
 *     
 *     
 *     另一方面，作为一个类
 *       >类内可以定义属性，方法，构造器等
 *       >可以被final修饰，表示此类不能被继承，言外之意 内部类可以被继承
 *       >可以被abstract修饰，表示抽象类，类不能被实例化了
 *       
 * 4.关注如下的3个问题
 *   4.1如何实例化成员内部类的对象
 *   4.2如何在成员内部类中区分调用外部类的结构
 *   4.3开发中局部内部类的使用
 *       
 * 
 * 
 */
public class InnerClassTest {
public static void main(String[] args) {
	//创建 静态的内部类 的实例化
	Person.CC cc = new Person.CC();
	
	//创建 非静态的内部类 的实例化
	Person p = new Person();
	Person.AA aa = p.new AA();
	aa.eat();
}
}
class Person{
	int age;
	String name;
	public void sleep(){
		System.out.println("睡");
	}
	//静态成员内部类
	static class CC{}
	
	//成员内部类
	class AA{
		String name;
		public void eat(){
			System.out.println("吃");
			sleep();//调用外部类的属性
		}
	}
	
	//局部内部类
	public void method(){
		class BB{}
	}
}